#include "../include/Plan.h"

Plan::Plan()
{
    //ctor
}

/**
* Constructeur d'un plan
* @param point un point quelconque du plan
* @param norm normale du plan
* @param m matériaux attribué au plan
* @return un plan
*/
Plan::Plan(pVect point, pVect norm, Materiaux m){
    this->point = point;
    this->norm = norm;
    this->norm.normalize();
    this->materiaux = m;
    this->d = -(this->norm*this->point);
}

/**
* Constructeur d'un plan
* @param point un point quelconque du plan
* @param v1 un vecteur du plan
* @param v2 un autre vecteur du plan
* @param m matériaux attribué au plan
* @return un plan
*/
Plan::Plan(pVect point, pVect v1, pVect v2, Materiaux m){
    this->point = point;
    this->norm = v1^v2; //calcul de la normale au plan
    this->norm.normalize();
    this->materiaux = m;
    this->d = -(this->norm*this->point);
}

Plan::~Plan()
{
    //dtor
}

/**
* Methode permettant de connaitre le point d'impact entre un rayon et un plan
* @param origin origine du rayon
* @param rayon vecteur directeur du rayon lancé
* @return un point d'impact
*/
HitPoint* Plan::intersect(pVect origin, pVect rayon){
    float t;
    t = -((norm*origin +d)/(norm*rayon));
    pVect inter = origin+rayon*t;

    if(t<0){
        return 0;
    }
    return new HitPoint(this, inter, norm, t, rayon,origin);
}
